#include "RR.h"
#include <stdio.h>
#include <stdlib.h>

/**
 * 函数: calculateTimes
 * 功能: 根据时间片轮转调度算法计算每个进程的完成时间、周转时间和等待时间
 *
 * 参数:
 *  - processes: 指向包含多个进程信息的数组
 *  - n: 进程数量
 *  - time_slice: 时间片长度
 *
 * 描述:
 *  计算进程的完成时间，周转时间和等待时间并存在结构体中即可
 */
void
calculateTimes (Process *processes, int n, int time_slice)
{
  // TODO
  int str=0;
  int spend=0;
  while(1)
  {
    int finish=1;
    for(int i=0;i<n;i++)
      if(processes[i].remaining_time!=0)
      {
        finish=0;
        break;
      }
    if(finish)
      break;
    if(processes[str].remaining_time==0)
    {
      str=(str+1)%n;
      continue;
    }
    if(processes[str].remaining_time>time_slice)
    {
      processes[str].remaining_time-=time_slice;
      str=(str+1)%n;
      spend+=time_slice;
      continue;
    }
    else(processes[str].remaining_time==time_slice)
    {
      processes[str].remaining_time=0;
      spend+=time_slice;
      processes[str].completion_time=spend;
      str=(str+1)%n;
      continue;
    }
    else
    {
      int need=processes[str].remaining_time;
      processes[str].remaining_time=0;
      spend+=need;
      processes[str].completion_time=spend;
      str=(str+1)%n;
      continue;
    }
  }
  for(int i=0;i<n;i++)
  {
    processes[i].turnaround_time=processes[i].completion_time-processes[i].arrival_time;
    processes[i].waiting_time=processes[i].turnaround_time-processes[i].burst_time;
  }
}
